<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyftpdlib 0.2.x serie release notes</title>
</head>

<body>
<div id="wikicontent">
  <h1>Version: 0.2.0 - Date: 2007-09-17</h1>
  <h2>Major enhancements</h2>
  <ul>
    <li><a title="FTPServer.py provides no way to limit the number of acceptable connections (DoS vulnerability)" href="http://code.google.com/p/pyftpdlib/issues/detail?id=5">Issue 5</a>: provided a way to configure / limit the number of maximum acceptable connections. </li>
    <li><a title="FTPServer.py provides no way to limit the number of acceptable connections (DoS vulnerability)" href="http://code.google.com/p/pyftpdlib/issues/detail?id=5">Issue 5</a>: provided a way to configure / limit the maximum number of clients which may be connected from the same IP address. </li>
    <li><a title="Implement site-to-site FXP feature" href="http://code.google.com/p/pyftpdlib/issues/detail?id=36">Issue 36</a>: added support for <a href="http://www.proftpd.org/docs/howto/FXP.html" rel="nofollow">FXP</a> site-to-site transfer to allow transfers between FTP servers. </li>
    <li><a title="Support for FTP servers behind NAT" href="http://code.google.com/p/pyftpdlib/issues/detail?id=39">Issue 39</a>: added NAT/Firewall support with PASV (passive) mode connections for FTP servers behind NAT. </li>
    <li><a title="Provide a way to control what ports to use for passive data-transfers" href="http://code.google.com/p/pyftpdlib/issues/detail?id=40">Issue 40</a>: provided new FTPHandler.passive_ports attribute to control what ports to use for passive data-transfers. </li>
  </ul>
  <h2>RFC-related enhancements</h2>
  <ul>
    <li><a title="FTPd should understand also TYPE AN and TYPE L8 commands" href="http://code.google.com/p/pyftpdlib/issues/detail?id=6">Issue 6</a>: accept and process TYPE AN and TYPE L8 commands. </li>
    <li><a title="Change account if USER command is received twice" href="http://code.google.com/p/pyftpdlib/issues/detail?id=7">Issue 7</a>: a new USER command can now be entered at any point to begin the login sequence again. </li>
    <li><a title="STOU should follow specifications defined into RFC1123" href="http://code.google.com/p/pyftpdlib/issues/detail?id=8">Issue 8</a>: be compliant with STOU output format defined in RFC 1123. </li>
    <li><a title="HELP should accept arguments" href="http://code.google.com/p/pyftpdlib/issues/detail?id=10">Issue 10</a>: HELP command arguments are now accepted. </li>
    <li><a title="RFC1123 wants a 554 error response to be returned if REST fails" href="http://code.google.com/p/pyftpdlib/issues/detail?id=12">Issue 12</a>: 554 error response is now returned on RETR/STOR if REST fails. </li>
    <li><a title="STAT used with an argument should return directory LISTing" href="http://code.google.com/p/pyftpdlib/issues/detail?id=15">Issue 15</a>: STAT used with an argument return directory LISTing over the command channel. </li>
  </ul>
  <h2>Security enhancements</h2>
  <ul>
    <li><a title="Stop buffering if extremely long lines are received" href="http://code.google.com/p/pyftpdlib/issues/detail?id=3">Issue 3</a>: stop buffering when extremely long lines are received. </li>
    <li><a title="(RFC2577) Reject PORT for privileged ports" href="http://code.google.com/p/pyftpdlib/issues/detail?id=11">Issue 11</a>: reject data connection when a privileged port is specified on PORT command. </li>
    <li><a title="Set a max number of tries for finding unique filename on STOU" href="http://code.google.com/p/pyftpdlib/issues/detail?id=25">Issue 25</a>: limit the number of attempts to find a unique filename for STOU command. </li>
  </ul>
  <h2>Usability enhancements</h2>
  <ul>
    <li>Provided an overridable attribute to easily set number of maximum login attempts before disconnecting. </li>
    <li>Docstrings are now provided for almost every method and function. </li>
    <li><a title="Command help strings improvements" href="http://code.google.com/p/pyftpdlib/issues/detail?id=30">Issue 30</a>: command help strings quality improved by adding command syntaxes. </li>
    <li><a title="Provide a compact list of recognized cmds on HELP" href="http://code.google.com/p/pyftpdlib/issues/detail?id=31">Issue 31</a>: a compact list of recognized commands is now provided on HELP. </li>
    <li><a title="Provide 426 responses on data channel " exceptional="" error="" events="" href="http://code.google.com/p/pyftpdlib/issues/detail?id=32">Issue 32</a>: we now provide a detailed error message on connection and file system errors. </li>
    <li><a title="Anonymous user write access" href="http://code.google.com/p/pyftpdlib/issues/detail?id=38">Issue 38</a>: anonymous user write access can now be optionally granted. </li>
  </ul>
  <h2>Test suite enhancements</h2>
  <ul>
    <li>File  creation/removal moved into setUp and tearDown methods to avoid leaving  behind orphaned temporary files in the event of a test suite failure. </li>
    <li><a title="Change account if USER command is received twice" href="http://code.google.com/p/pyftpdlib/issues/detail?id=7">Issue 7</a>: added tests for a new USER provided while already authenticated. </li>
    <li><a title="Change account if USER command is received twice" href="http://code.google.com/p/pyftpdlib/issues/detail?id=7">Issue 7</a>: added tests for REIN while a transfer is in progress. </li>
    <li><a title="ABOR not checked in test suite" href="http://code.google.com/p/pyftpdlib/issues/detail?id=28">Issue 28</a>: added tests for ABOR command. </li>
  </ul>
  <h2>Bugfixes</h2>
  <ul>
    <li><a title="Socket's reuse_address used after the socket's binding" href="http://code.google.com/p/pyftpdlib/issues/detail?id=4">Issue 4</a>: socket's &quot;reuse_address&quot; feature was used after the socket's binding. </li>
    <li><a title="Path traversal vulnerability" href="http://code.google.com/p/pyftpdlib/issues/detail?id=9">Issue 9</a>: corrected path traversal vulnerability affecting file-system path translations. </li>
    <li><a title="Wrong CDUP response code" href="http://code.google.com/p/pyftpdlib/issues/detail?id=14">Issue 14</a>: a wrong response code was returned on CDUP. </li>
    <li><a title="Reject SIZE for directories" href="http://code.google.com/p/pyftpdlib/issues/detail?id=17">Issue 17</a>: reject SIZE if pathname is a directory. </li>
    <li><a title="Wrong ABOR response code" href="http://code.google.com/p/pyftpdlib/issues/detail?id=18">Issue 18</a>: a wrong ABOR response code type was returned. </li>
    <li><a title="FTPd should watch for STOU preceded by REST" href="http://code.google.com/p/pyftpdlib/issues/detail?id=19">Issue 19</a>: watch for STOU preceded by REST which makes no sense. </li>
    <li><a title="" attempted="" login="" counter="" is="" not="" increased="" on="" wrong="" username="" href="http://code.google.com/p/pyftpdlib/issues/detail?id=20">Issue 20</a>: &quot;attempted login&quot; counter wasn't incremented on wrong username. </li>
    <li><a title="Permit STAT also if user isn't authenticated yet" href="http://code.google.com/p/pyftpdlib/issues/detail?id=21">Issue 21</a>: STAT wasn't permitted if user wasn't authenticated yet. </li>
    <li><a title="Memory leak occurs on KeyboardInterrupt / SIGTERM" href="http://code.google.com/p/pyftpdlib/issues/detail?id=22">Issue 22</a>: corrected memory leaks occurring on KeyboardInterrupt<a href="http://code.google.com/p/pyftpdlib/w/edit/KeyboardInterrupt">?</a>/SIGTERM. </li>
    <li><a title="PASS should be rejected if user is already authenticated" href="http://code.google.com/p/pyftpdlib/issues/detail?id=23">Issue 23</a>: PASS wasn't rejected when user was already authenticated. </li>
    <li><a title="Problems with pyftpdlib and Python CE" href="http://code.google.com/p/pyftpdlib/issues/detail?id=24">Issue 24</a>: can't use os.strerror() on pythonCE. </li>
    <li><a title="Problems with pyftpdlib and Python CE" href="http://code.google.com/p/pyftpdlib/issues/detail?id=24">Issue 24</a>: problem occurred on Windows when using '\\' as user's home directory. </li>
    <li><a title="" invalid="" rest="" error="" in="" test="" suite="" test_rest_on_stor="" (os="" x,="" python="" 2.5)="" href="http://code.google.com/p/pyftpdlib/issues/detail?id=26">Issue 26</a>: used select() by default instead of poll() because of an asyncore module's defect. </li>
    <li><a title="Some session attributes aren't resetted on REIN" href="http://code.google.com/p/pyftpdlib/issues/detail?id=33">Issue 33</a>: some FTPHandler class attributes wasn't resetted on REIN. </li>
    <li><a title="FTPd should watch for APPE preceded by REST" href="http://code.google.com/p/pyftpdlib/issues/detail?id=35">Issue 35</a>: watch for APPE preceded by REST which makes no sense. </li>
  </ul>
  <p>&nbsp;</p>
</div>
</body>
</html>
